package org.focusj.scala.clazz
import scala.reflect.BeanProperty

/**
 * 定义一个简单的scala类
 */
//java-style
class Student {
    val id: Long = System.currentTimeMillis() //1.我们需给出声明为val的字段的默认值，给定之后这个字段值不可以在变
    private var No: Int = _
    private[this] val parents: String = """Jhon"""
    var name: String = _ //2.像这样的可变的字段我们可以用_这样的一个占位符
    var address: String = _
    //3. 如果我们不明确的声明为private，则这个属性是public

    //只要我们写到这里scala编译器已经给我们生成了set和get方法了
    //只不过方法的明明不是像setXXX、getXXX那样
    //贴出反编译之后的class文件
    //set方法:public void address_$eq(java.lang.String);//在jvm中是不能识别=的，所以set方法在scala中应该是address_=这样的形式
    //get方法:public java.lang.String address();

    //**********************反编译后的class文件**********************//

    def parents(s: Student) = this.No
}

class Girl(name: String, @BeanProperty var address: String, var grade: Int) {
    print("init")
    def this(name: String, address: String) { //重载构造器
        this(name, address, 0); //默认的构造器
    }
    def herName: String = name //这样name字段会提升为Girl的属性
}

object Student extends App {
    val student = new Student
    student.No = 10
    student.name = "Bad"
    student.address = "paradise"

    println(student.No + " " + student.name + " " + student.address)
}